
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;

/**
 * @作者: xiaoxun
 * @日期: 2025/3/10 20:57
 * @描述: File
 */
public class FileDemo01 {
	public static void main(String[] args) throws IOException {
	//1、创建对象
		File f1=new File("E:\\My picture\\风景素材\\昆明文理学院\\001.jpg");
		//2、取文件的字节个数
		System.out.println(f1.length());
		//file可以代表文件或文件夹
		File f2=new File("D:\\DevelopmentCode\\my-java-project");
		System.out.println(f2.length());//拿的是文件夹本身大小
		//file可以代表不存在的文件夹
		File f3=new File("E:\\src");

		//使用相对路径
		File f4=new File("Day08/src/001.jpg");
		System.out.println(f4.length());
		//（1）判断该文件是否村子啊
		System.out.println(f4.exists());
		//（2）判断对象对应的是否是文件
		System.out.println(f4.isFile());
		//(3)判断是否是文件夹
		System.out.println(f4.isDirectory());
		//(4)获取文件的名称
		System.out.println(f4.getName());
		//(5)获取文件最后修改时间

		System.out.println(f4.lastModified());
		//(6)获取对象使用的路径
		System.out.println(f4.getPath());
		//（7）获取绝对路径
		System.out.println(f4.getAbsolutePath());
		System.out.println(f4.getAbsoluteFile());
		//创建wenjian
		File f5=new File("Day08/xiaoxun.text");
		f5.createNewFile();
		//创建文件夹：mkdir



		System.out.println(f5.getAbsoluteFile());


		//删除文件
		//只能删除文件和空文件夹
		f5.delete();

		//文件夹遍历
		File f6=new File("D:\\DevelopmentCode\\my-java-project\\JavaSE");
		String[] names=f6.list();
		for (String s:names){
			System.out.println(s);
		}
		File[] files=f6.listFiles();
		for (File file:files){
			System.out.println(file.getAbsoluteFile());
		}
		/**
		 * 注意事项：
		 * 	（1）当主调是文件，或者文件不存在，返回null
		 * 	（2）当主调文件是空文件夹，返回一个长度为0的数组
		 * 	（3）当主调是一个有内容的文件夹，将里面的所有一级文件夹的路径放在File数组中返回
		 * 	（4）当主调是一个文件夹，且里面有隐藏文件，将里面的所有文件的文件夹历经放在File数组中返回，包含隐藏文件
		 * 	（5）当主调是一个文件夹，但是没有权限访问该文件时，返回null
		 * 	*/

		//方法递归
		/**
		 * 递归是一种算法，在程序设计语言中广泛应用
		 * 从形式上说，方法调用自己的形式称为方法递归【自己调用自己】
		 * 三要素：
		 * 		递归的公式：f(n)=f(n-1)*n
		 * 		递归的终结点：f(1)
		 * 		递归的方向必须走向终结点
		 **/
//		test1();
		int a=f(5);
		System.out.println(a);
		int s=sum(100);
		System.out.println(s);
		System.out.println(tao(1));
//文件搜索
		File dir=new File("D:/");
		searchFile(dir,"QQ.exe");

	}
	public static void test1(){
		System.out.println("text1");
		test1();
	}
	//计算n的阶乘
	public static int f(int n){
		if (n==1){
			return 1;
		}
		return f(n-1)*n;
	}
	public static int sum(int n){
		if (n==1){
			return 1;
		}
		return sum(n-1)+n;
	}
	public static int tao(int n){
		if (n==10){
			return 1;
		}
		return 2*tao(n+1)+2;
	}
	public static void searchFile(File dir,String fileName){
		if (dir==null || !dir.exists() || dir.isFile()){
			return;//不搜索
		}
		//开始搜索
		File[] files=dir.listFiles();
		if (files==null ||files.length==0){
			return;
		}
		//遍历
		for (File file:files){
			if (file.isFile()){
				//是文件
				if (file.getName().contains(fileName)){
					System.out.println(file.getAbsoluteFile());
				}
			}else {
//				是文件夹
				searchFile(file,fileName);
			}
		}
	}
}
